package com.atguigu.jdk;

import java.util.Arrays;
import java.util.Comparator;

/**
 * @program: design-patterns
 * @author: yangshen
 * @description: 策略模式
 * @create: 2022-04-05 10:24
 **/
public class Strategy {
    public static void main(String[] args) {
        //数组
        Integer [] data = {9, 1, 2, 8, 5, 3};

        //实现升序排序，返回-1放左边，1放右边，0不动

        //1.实现了Comparator 接口（策略接口），匿名类对象是 comparatorImpl
        //2.对象 comparatorImpl 就是实现了策略接口的对象
        //3.public int compare(Integer o1, Integer o2) 指定具体的处理方式
        Comparator<Integer> comparatorImpl = new Comparator<Integer>() {
            @Override
            public int compare(Integer o1, Integer o2) {
                if (o1 > o2){
                    return 1;
                }else {
                    return -1;
                }
            }
        };
        /**
         * 方法说明
         * public static <T> void sort(T[] a, Comparator<? super T> c) {
         *         if (c == null) {
         *             sort(a);     //调用默认排序方法
         *         } else {
         *             if (LegacyMergeSort.userRequested)
         *                 legacyMergeSort(a, c);       //使用策略对象c
         *             else
         *                 //使用策略对象c
         *                 TimSort.sort(a, 0, a.length, c, null, 0, 0);
         *         }
         *     }
         */
        //方式1-使用策略接口对象
        Arrays.sort(data, comparatorImpl);
        //升序排列
        System.out.println(Arrays.toString(data));

        //方式2，lambda表达式实现
        Integer [] data2 = {19, 11, 12, 18, 15, 13};
        Arrays.sort(data2, (var1, var2) ->{
            if (var1 > var2){
                return 1;
            }else {
                return -1;
            }
        });
        System.out.println(Arrays.toString(data2));


    }
}
